有没有办法通过System.Reflection、System.Diagnostics或其他方式获取对调用静态方法的实际实例的引用,而不将其传递给方法本身?例如,沿着这些线的东西classA{publicvoidDoSomething(){StaticClass.ExecuteMethod();}}classB{publicvoidDoSomething(){SomeOtherClass.ExecuteMethod();}}publicclassSomeOtherClass{publicstaticvoidExecuteMethod(){//ReturnsaninstanceofAif
我正在开发一个从远程机器读取事件日志(应用程序)的应用程序。我在.net中使用EventLog类,然后迭代日志条目,但这非常慢。在某些情况下,某些机器有40000多个日志条目,并且需要数小时才能遍历这些条目。完成这项任务的最佳方法是什么?.net中是否有任何其他更快或任何其他技术的类? 最佳答案 伙计,我感受到你的痛苦。我们在我们的应用程序中遇到了完全相同的问题。您的解决方案有一个分支,具体取决于您正在运行的服务器版本以及您的“目标”机器正在运行的服务器版本。如果您同时使用Vista或WindowsServer2008,那么您很幸运
给定包含原始数据集的类A和包含该数据的重组版本(GUI就绪)的类B,我想让A中的原始数据在B中可见。显然,A类中的原始数据包含在私有(private)成员中。我想通过使用类似于C++友好类方法的方法使该数据在B中可见。我该如何解决这个问题?谢谢。 最佳答案 严格来说,您不能定义可以向其公开数据的特定类(或类列表)。但是,您可以使用internal访问修饰符而不是private,这使得成员可用于同一程序集中的任何类。话虽这么说,您应该强烈考虑通过属性而不是字段公开这些成员(我猜您正计划公开这些成员)。这样做将允许该类准确定义该信息如何
我有这两个类:Item:BusinessBasewhereT:Item{publicstaticTNewItem(){//somecodehere}}Video:Item{}现在我想使用反射调用类Video上的NewItem()方法。当我尝试这样做时:MethodInfoinf=typeof(Video).GetMethod("NewItem",BindingFlags.Static);执行此行后的对象inf仍然为空。我可以在Video类上调用静态NewItem()方法吗? 最佳答案 您需要指定BindingFlags.Public
我正在寻找一种快速简便的方法来在模型中发生回发时绑定(bind)复选框列表项列表。显然,现在常见的做法似乎是这样的form.GetValues("checkboxList")[0].Contains("true");这似乎很痛苦而且并不完全安全。在UpdateModel(myViewModel,form.ToValueProvider());期间,有没有一种方法可以绑定(bind)复选框列表(在View中使用或不使用帮助器创建)或者甚至是数据数组?将填充IList的阶段或string[]模型内部? 最佳答案 你可以从一个模型开始:p
我对扩展方法的工作原理有点困惑。如果我没看错http://msdn.microsoft.com/en-us/library/bb383977.aspx还有这个Ifanextensionmethodhasthesamesignatureasamethodinthesealedclass,whatisthecallprecedence?.那么下面应该写出“Instance”,却写成了“Extensionmethod”。interfaceIFoo{}classFoo:IFoo{publicvoidSay(){Console.WriteLine("Instance");}}staticclas
我正在处理涉及许多客户端PC和一些服务器计算机的设置。我需要在这些PC之间组织一种可靠且快速的文件传输方法,该方法将由在两台电脑上运行的C#应用程序启动。任何客户端都可能希望从任何服务器发送/接收数据。选项是:FTP-使用FtpWebRequest或SOSFTP将文件上传到FTP服务器。服务器检查其文件系统上的新文件并执行所需的步骤。SCP-安全文件传输。用法与FTP相同,但增加了机器之间的安全性。可能比FTP慢。DropBox/Box.Net-使用带有库的在线云存储解决方案,例如SharpBox.可能是免费/付费的。考虑到该方拥有您的文件,可能不太安全。UDP-使用类似EME的库或G
我有一个像这样有一个空主体的方法:publicvoidFoo(){}根据ReSharper的建议,我想将它转换为表达式主体以节省一些空间,它变成了:publicvoidFoo()=>;无法编译。是否有不支持的具体原因?而且我认为我应该为ReSharper打开一个错误票,因为它会将代码重构为不可编译的版本。 最佳答案 [编辑:此答案不正确,请勿使用-请参阅评论。]如您所见,表达式主体使用了lambda运算符(“=>”)。如果您仍想将空的void方法编写为表达式主体,则可以使用Expression.Empty()来表明Foo()是空(v
我有这段代码发出一些IL指令,这些指令在null对象上调用string.IndexOf:MethodBuildermethodBuilder=typeBuilder.DefineMethod("Foo",MethodAttributes.Public,typeof(void),Array.Empty());varmethodInfo=typeof(string).GetMethod("IndexOf",new[]{typeof(char)});ILGeneratorilGenerator=methodBuilder.GetILGenerator();ilGenerator.Emit(O
我需要在另一个控件的事件中找到鼠标下的控件。我可以从GetTopLevel开始,然后使用GetChildAtPoint进行迭代,但是有没有更快的方法? 最佳答案 这段代码没有多大意义,但它确实避免了遍历控件集合:[System.Runtime.InteropServices.DllImport("user32.dll")]privatestaticexternIntPtrWindowFromPoint(Pointpnt);privatevoidForm1_MouseMove(objectsender,MouseEventArgse)